home *** CD-ROM | disk | FTP | other *** search
/ Chip 1996 April / CHIP 1996 aprilis (CD06).zip / CHIP_CD06.ISO / hypertxt.arj / 92 / PASCAL.CD < prev    next >
Text File  |  1995-09-17  |  31KB  |  629 lines

  1.       @VRohaaam!!!...@N
  2.  
  3.       @VStony Brook Pascal+@N
  4.  
  5.           A  Stony  Brook cég  Pascal+-a  fejlesztôi környezetként
  6.       ugyan  nem  váltja  fel  a  Turbo  Pascalt,  de  gyorsabb és
  7.       tömörebb programokat állít elô.
  8.           Amikor  új  szoftvertermékek jelennek  meg  a piacon,  a
  9.       gyártók azonnal nagydobra  verik a hírét.  Ez a Stony  Brook
  10.       cég új Pascal+ compilerére is igaz, szeretnék vele megelôzni
  11.       a népszerû Turbo Pascal 6.0-t. A CHIP alaposan letesztelte a
  12.       Pascal+  legújabb,  6.0e verzióját,  és  összehasonlította a
  13.       Turbo  Pascal  6.0-val.  Beszámolunk  mindkét szoftvertermék
  14.       összes elônyérôl és hátrányáról.
  15.           A  gyártó  adatai   szerint  a  Pascal+   százszázalékig
  16.       forrás-kompatibilis a Turbo Pascal 6.0-val. Ez azt  jelenti,
  17.       hogy minden olyan Pascal  programot, amit megemészt a  Turbo
  18.       Pascal,  a  Pascal+  is fel  tud  dolgozni  anélkül, hogy  a
  19.       programozónak  a  forrásszöveg  egyetlen  sorát  meg kellene
  20.       változtatnia. A Stony Brook cég továbbá azt állítja, hogy  a
  21.       Pascal+  által  elôállított  kód  kétszer  gyorsabb,  és  30
  22.       százalékkal tömörebb mint a Turbóé.
  23.           A Pascal+  csomagja három  vaskos angol  kézikönyvbôl és
  24.       három floppyból áll, amelyeken tömörítve rajta van az összes
  25.       program. Mindent  egybevéve a  szoftver kilenc  részbôl áll,
  26.       ezek: a fejlesztôi környezet, a Pascal compiler, a debugger,
  27.       a futásidejû  könyvtár, a  make segédprogram,  a linker,  az
  28.       objektumkezelô, a definíciós  modulok a Windows  úgynevezett
  29.       Application    Program    Interface-éhez    (API)    és    a
  30.       Windows-programozáshoz szükséges  könyvtár. A  Pascal+ tehát
  31.       optimálisan felhasználható  DOS-szinten és  Windows-ban való
  32.       programozáshoz is.
  33.  
  34.  
  35.       @VNincs probléma a Windowszal@N
  36.  
  37.           A lemezeken rajta van  a Technojock Object Toolkit  és a
  38.       TEGL  Windows-Toolkit  is. A  Pascal+  felhasználója mindkét
  39.       segédeszközzel kényelmesen programozhat saját  ablakkezelôt,
  40.       amely  azonban  egyáltalán  nem  hasonlít  a  Windowshoz. Az
  41.       ingyenesen mellékelt toolkitekkel olyan, egyszerûbb  ablakok
  42.       hozhatók   létre,   amilyeneket  a   Turbo   Pascal  6.0-ból
  43.       ismerhetünk.
  44.           A  Windows alatt  futtatni kívánt  Pascal programokat  a
  45.       Stony   Brook   programcsomagjában   szintén   meglévô   PPC
  46.       compilerrel kell lefordítani. Ezt a compilert speciálisan  a
  47.       Windows-programozáshoz fejlesztették ki.
  48.           Ezenkívül minden olyan Windows-környezetbe szánt  modult
  49.       meg kell  jelölni a  @K//WINDOWS@N fordítási  elôírással. Ez  az
  50.       opció  arra   ösztönzi  a   Pascal+-t,  hogy   az  eljárások
  51.       meghívásakor  és  a   belôlük  való  kilépéskor   egy  olyan
  52.       speciális utasítássorozatot állítson elô, amely  gondoskodik
  53.       arról,   hogy  a   Windows  3.0   vagy  3.1   képes   legyen
  54.       együttmûködni a lefordított Pascal programmal.
  55.           A Microsoft resource compilere (RC), amely a Windows SDK
  56.       része, igen jól illeszkedik a Pascal+-hoz.
  57.           Nézzük  a  két toolkitet:  a  TechnoJock programkönyvtár
  58.       nagy segítséget jelent az egyre divatosabb objektumorientált
  59.       programozásban.  A  saját  programokba  könnyen beépíthetünk
  60.       vele  párbeszéddobozokat  és modern  ablaktechnikát.  A TEGL
  61.       ezzel  szemben  sok  grafikai  rutint  és  olyan programokat
  62.       tartalmaz,   amelyek   virtuális   tárkezelést   és    saját
  63.       ablakkezelést tesznek  lehetôvé. Ehhez  jön még  egy további
  64.       csemege: a Pascal+  compiler teljes futásidejû  könyvtárának
  65.       forrásszövege nemsokára kapható lesz mintegy 350 márkáért  a
  66.       grencheni (Svájc) A+L cégnél. îgy a programozók kezében lesz
  67.       az  összes  olyan  eszköz,   amellyel  el  tudnak  bánni   a
  68.       legmakacsabb hibákkal is.
  69.           Aki  kizárólag a  Turbo Pascallal  dolgozik, az  kevéssé
  70.       törôdik   a   Turbo   compiler   által   elôállított  object
  71.       file-okkal.  Közismert, hogy  az object  file-ok olyan  gépi
  72.       kódot  tartalmaznak,  amelybôl   a  linker  állítja   elô  a
  73.       végleges, futtatható programot, .EXE file formájában.
  74.           Akinek  hivatásából  adódóan  több  programnyelvvel  van
  75.       dolga, és naponta szeretne egymással összekapcsolni  Pascal,
  76.       C,  assembly és  más nyelven  írt object  file-okat, az,  ha
  77.       Turbo Pascal-t  használ, nagy  problémákba ütközik.  A Turbo
  78.       6.0 ugyanis speciális  object file-okat készít,  amelyek nem
  79.       kompatibilisek    a    DOS    területérôl    származó    más
  80.       fordítóprogramokéval. A Pascal+  ezzel szemben olyan  object
  81.       file-okat készít, amelyek minden szempontból eleget  tesznek
  82.       a  szokásos  Microsoft-szabványnak.   Míg  a  Turbo   Pascal
  83.       felhasználója  elszigetelt  programozási  környezetben   él,
  84.       addig a Stony Brook  cég Pascal+ compilerével a  programozók
  85.       elôtt  tárva-nyitva  áll  szinte  az  összes professzionális
  86.       programozói platform.
  87.  
  88.  
  89.       @V10..30 százalékkal tömörebb kód@N
  90.  
  91.           Az  esetlegesen  elôforduló  kompatibilitási   problémák
  92.       vizsgálatára   elôvettük   több   nagyobb   Pascal   program
  93.       forrásszövegét   --   e   programokat   a   szerkesztôségben
  94.       fejlesztették ki az ávek során.
  95.           Ezek  közül  az elsô  az  ismert @K(Németországban  nagyon
  96.       @Kolcsón,      nagy      mennyiségben      eladott)@N      TDB-4
  97.       Turbo-adatbáziskezelô program, amit Pascalban és assemblyben
  98.       írtak, és amely kihasználja a Turbo Pascal 6.0 compiler  sok
  99.       jellegzetes tulajdonságát. Az adatbáziskezelô legtöbb, gyors
  100.       futást  kívánó  részét  assemblyben  írták,  mivel  a  Turbo
  101.       compiler  által elôállított  kód e  helyeken egyszerûen  túl
  102.       lassú volt.
  103.           A TDB-4 adatbáziskezelô program forrásszövege több  mint
  104.       20 ezer sorból áll, és a merevlemezen bô 700 Kbyte-ot foglal
  105.       el. Bár sok  benne az olyan  programrész, amely sajátosan  a
  106.       Turbora jellemzô, a Pascal+ zúgolódás nélkül lefordította  a
  107.       forrásszöveget.
  108.           A Turbo Pascal 6.0  a TDB-4 forráskódjából 310  Kbyte-os
  109.       .EXE file-t állított  elô. A Pascal+-szal  az .EXE file  283
  110.       Kbyte-ra  zsugorodott  össze.  A  megtakarítás  mintegy  tíz
  111.       százalék.
  112.           A Stony Brook  ugyan azt állítja,  hogy a Pascal+  kódja
  113.       akár 30 százalékkal is  rövidebb mint a Turbo  Pascal 6.0-é,
  114.       de a TDB-4 esetében ez nem volt igaz. Ennek ellenére érdemes
  115.       volt  a  Pascal+-szal  lefordítani  a  TDB-4-et,  hiszen  30
  116.       Kbyte-tal  több memória  marad a  heap számára,  amely az  a
  117.       memóriaterület,  ahol  a   TDB-4  futás  közben   az  összes
  118.       elôforduló  adatot kezeli.  îgy a  TDB-4 nem  ütközik  olyan
  119.       hamar a DOS 640 Kbyte-os korlátjába.
  120.           A  második  program   egy  szabványos  Pascal   compiler
  121.       forráskódja volt. Egy  P-kódra fordító compilerrôl  van szó,
  122.       amelyhez  írtak  egy   P-kód-assemblert  és  Pascalban   egy
  123.       P-kód-interpretert  is.   A  P-kód-compiler   képes  önmagát
  124.       lefordítani és lefuttatni (bootstrap compiler).
  125.           A körülbelül 9000 programsorból álló forráskód tervezése
  126.       során különleges figyelmet fordítottunk az áttekinthetôségre
  127.       és egyszerû olvashatóságra. Tudatosan nem használtunk  olyan
  128.       megoldásokat, amelyek ugyan hatékony gépi kódhoz vezetnének,
  129.       de nehezebbé tennék a program megértését.
  130.           A  P-kód-compiler  forráskódját  elôször  Turbo  6.0-val
  131.       fordítottuk le. A létrehozott  .EXE file hossza 94|598  byte
  132.       volt. òriási meglepetés ért minket, amikor a Pascal+  66|169
  133.       byte-ot produkált -- ez 30 százalékkal tömörebb kód, mint  a
  134.       Turbo Pascal-é. Ez  az érték összhangban  van a Stony  Brook
  135.       reklámjával.
  136.  
  137.  
  138.       @VDupla sebesség@N
  139.  
  140.           Harmadik  programként  egy  CAD-program   forrásszövegét
  141.       jelöltük ki, amit nagyobb repülôgép-modellek kifejlesztésére
  142.       írt egy programozó. Körülbelül 2000 soros, jól kihasználja a
  143.       számítógép    VGA-kártyáját,    és    az    Intel   80287-es
  144.       koprocesszorával  futtatható.  Az  aritmetikai  processzorra
  145.       óriási   szükség   van,   mivel   a   CAD-programnak    több
  146.       differenciálegyenlet-rendszert   kell   megoldania,  mielôtt
  147.       megszerkeszthetné a képernyôn lévô grafikát.
  148.           A Pascal+-szal való  lefordítás után ennek  a programnak
  149.       az .EXE file-ja is 32 százalékkal rövidebb volt mint a Turbo
  150.       Pascal compileré.  A grafikus  megjelenítés sebessége  pedig
  151.       átlagosan 2,2-szer gyorsabban történt mint a Turbo 6.0-val.
  152.           Ha  a  debuggerrel   szemléljük  meg  a   Pascal+  által
  153.       elôállított gépi  kódot, akkor  világossá válik,  hogy miért
  154.       megy  végbe  gyorsabban  a  grafikus  megjelenítés:  a Turbo
  155.       Pascal a paramétereket  a verembôl veszi  elô, ami sok  idôt
  156.       vesz  igénybe, a  Pascal+ közvetlenül  a CPU  regisztereibôl
  157.       írja át azokat a videomemóriába. A maximálisan  optimalizált
  158.       kód tehát a grafikus megjelenítés során is elônyöket nyújt.
  159.           Egy  mátrixösszeadás  alapján világossá  válhat,  hogy a
  160.       Turbo  Pascal 6.0-hoz  képest a  Pascal+ mennyivel  tömörebb
  161.       kódot  készít.  Azért,  hogy  a  Pascal  program  a   lehetô
  162.       legegyszerûbb maradjon, a mátrix elemeit nem inicializáltuk,
  163.       és nem írattuk ki. Még egy olyan rövid programnál is, mint a
  164.       mátrixösszeadás, a Pascal+ egyharmadával csökkentette a gépi
  165.       kódot.
  166.  
  167.  
  168.       @VAz assembly alig ad elônyt@N
  169.  
  170.           Sok  Turbo  Pascalt használó  fejlesztô  a gyors  futást
  171.       igénylô  programrészek  írásakor áttér  az  assemblyben való
  172.       programozásra, mivel a  compiler által elôállított  gépi kód
  173.       nem elég  gyors. A  Pascal+ használatakor  gyakran nincs már
  174.       szükség az idôigényes  és sok hibalehetôséget  magában rejtô
  175.       assembly programozásra, mivel a compiler által készített kód
  176.       is elég gyors.
  177.           A  halmazok  és  a  halmazokkal  való  mûveletek  egyike
  178.       azoknak az értékes lehetôségeknek, amelyekkel rendelkezik  a
  179.       Pascal.  A  programozói  munka  halmazok  használatakor  sok
  180.       esetben leegyszerûsödik, és javul a programok olvashatósága.
  181.       Sok  programozó éppen  a halmazoknál  látja a  Turbo  Pascal
  182.       egyik kritikus pontját: ha  gyors és hatékony kód  kell, sok
  183.       Turbo Pascalt  használó programozó  más programszerkezeteket
  184.       vagy az assemblyt választja.  Ha tehát a dolog  a sebességen
  185.       múlik, akkor például az
  186.           @KIF ch IN ['A'..'Z','a'..'z'] THEN...@N
  187.           halmaz-mûveletet így írnánk Turbo Pascalban:
  188.           @KIF (ch>='A') AND (ch<='Z')
  189.           @KOR
  190.           @K(ch>='a') AND (ch<='z')
  191.           @KTHEN...@N
  192.           A Pascal+ esetében azonban nincs jelentôsége annak, hogy
  193.       az  elsô  vagy  a  második  programszerkezetet használjuk-e,
  194.       mivel  a  compiler mindkettôbôl  ugyanazt  a hatékony  kódot
  195.       állítja elô.
  196.           A Pascal+  compiler fejlesztôi  igen jól  oldották meg a
  197.       hozzáférést    a    már     meglévô,    C    nyelven     írt
  198.       programkönyvtárakhoz.  Csak  egy  Pascal  unitot  kell írni,
  199.       amelynek interface  részében fel  van sorolva  a C  könyvtár
  200.       összes eljárása. E unit implementációs része üres.
  201.           Tegyük  fel,  hogy  az egyik  C  könyvtárban  igen gyors
  202.       grafikai rutinok találhatók, amiket bele kell illeszteni egy
  203.       Pascal programba. A CGraph unit ekkor például így nézhet  ki
  204.       Pascal+-ban:
  205.           @KUnit CGraph;
  206.           @KINTERFACE
  207.           @KPROCEDURE
  208.           @KDrawLine (x1,y1,x2,y2:integer);
  209.           @K[C]; external '_DrawLine';
  210.           @K....
  211.           @KIMPLEMENTATION
  212.           @KEND.@N
  213.           A  ""[C]" karakterlánc  olyan eljárás-attribútum,  amely
  214.       egy C függvényt jelez.  A '_DrawLine' jelölés egy  nyilvános
  215.       nevet (PUBLIC) jelöl a C könyvtárban. A ""[C]"  attribútumon
  216.       kívül a Pascal+ még további kilencet ismer.
  217.           A Pascal+ programozónak így állandóan rendelkezésére áll
  218.       egy roppant nagy szoftverbázis.  Mivel nem kell mindig  újra
  219.       feltalálni a kereket,  ezért a Pascal+-szal  igen hatékonyan
  220.       lehet dolgozni: ha a megfelelô rutin nem található meg egyik
  221.       C könyvtárban  sem, akkor  a fejlesztô  például átkutat  egy
  222.       Fortran könyvtárat, és megtalálja, amit keresett. A  Pascal+
  223.       jelmondata tehát az, hogy több lovat kell egyszerre megülni.
  224.       Mindenesetre  az  esetleges problémák  elkerülése  végett az
  225.       ""idegen nyelvû" compiler a Microsoft terméke legyen.
  226.           Megdöbbentôen tömör és gyors  kódot állít elô a  Pascal+
  227.       compiler. Ezért megvizsgáltuk, hogyan dolgozik a compiler  a
  228.       kódgeneráláskor.  Ennek  során  figyelemre  méltó  technikák
  229.       kerültek  napvilágra,  amelyek  szinte  minden   lehetôséget
  230.       kimerítenek.
  231.  
  232.  
  233.       @VCsak a kód optimalizálása növeli a sebességet@N
  234.  
  235.           A     kód     optimálásában     használt      jelszavak:
  236.       adatfolyam-analízis és kulcslyuk- (peephole-) optimalizálás.
  237.       Néhány példával megvilágítjuk, mit kell ezek alatt érteni.
  238.           Amikor  a  Pascal+ lefordít  egy  programot, a  compiler
  239.       nemcsak a  forrásszöveget vizsgálja  meg, hanem  megjegyzi a
  240.       Pascal programban lévô összes változót és más objektumot is.
  241.       Tegyük fel, hogy egy rossz programozó a program futása alatt
  242.       csak  egyetlen  egyszer  ad  valamilyen  értéket  az   egyik
  243.       változónak. Ekkor a Pascal+ a változót a kódban  konstanssal
  244.       helyettesíti. Egy konstans címzése gyorsabb, és alig igényel
  245.       gépi kódot.
  246.           A  következô  példa  ugyanezt  az  irányt  követi,  és a
  247.       kódoptimalizáló   mûködési   módját   szemlélteti   a    kód
  248.       elôállítása során:
  249.           @KVAR a,b: integer;
  250.           @K....
  251.           @Ka: = 1; b: = 1;
  252.           @K....
  253.           @Kb: = a;
  254.           @K....@N
  255.           A   Pascal+   itt   kitalálja   az   adatfolyam-analízis
  256.       segítségével, hogy a program futása alatt az ""a" és a  ""b"
  257.       változók  értéke   ugyanaz.  Ezért   a  @Kb:   =  a@N  értékadás
  258.       felesleges.  A Pascal+  compiler így  kihagyja az  értékadás
  259.       kódját.
  260.           Adott a következô programszerkezet:
  261.           @KIF (a+b)<>0
  262.           @KTHEN
  263.           @Ky: = x DIV (a+b)
  264.           @KELSE
  265.           @K.....@N
  266.           Itt a  feltételben és  az értékadásban  is elôfordul  az
  267.       @K(a+b)@N  kifejezés.  Az  adatfolyam-analízis  segítségével   a
  268.       Pascal+  megjegyzi a  kiszámított @K(a+b)@N  kifejezést, és,  ha
  269.       lehetséges, konstanssá  redukálja. Más  szavakkal: az  @K(a+b)@N
  270.       kifejezés   értéke   a  program   futása   alatt  vagy   egy
  271.       CPU-regiszteren keresztül vagy a veremben lévô  konstansként
  272.       kerül átadásra. Ez az  optimalizálás gépi kódot takarít  meg
  273.       és növeli a sebességet.
  274.           Egy  másik  optimálási  technika  az,  hogy  a   Pascal+
  275.       automatikusan csökkenti  az aritmetikai  kifejezéseket és  a
  276.       változók hosszát. Például egy @Kinteger@N szám  kettô-hatvánnyal
  277.       való  osztását  gyors  eltolási  és  forgatási  mûveletekkel
  278.       helyettesíti.  Ha  egy  @Kinteger@N változó  (16  bit)  értéke a
  279.       program futása alatt a paraméter átadásánál belefér egyetlen
  280.       byte-ba (8  bit), akkor  csak egyetlen  byte kerül átadásra.
  281.       Szorzásnál és osztásnál egyébként a Turbo Pascal is  hasonló
  282.       optimálásokat végez.
  283.           A  programok  áttekinthetôsége  érdekében  a   Pascalban
  284.       fejlesztôk gyakran írnak sok kis eljárást, amelyek a program
  285.       futása alatt  csak egyszer-kétszer  kerülnek meghívásra.  Az
  286.       eljáráshívások elég idôigényesek, mivel a veremben  memóriát
  287.       kell lefoglalni, különbözô  paramétereket, az eljárás  saját
  288.       adatait és a visszatérési címet el kell helyezni a veremben,
  289.       mielôtt megkezdôdhet a tulajdonképpeni munka. Az  eljárásból
  290.       való visszatéréskor pedig ki kell takarítani a vermet.
  291.           Az  adatfolyam-analízis  segítségével a  Pascal+  itt is
  292.       optimál. Megjegyzi, hol és hányszor hívják meg az  eljárást.
  293.       Ha lehet, az eljárásokat kifejti, és spagetti-kódként  építi
  294.       be a  programba. Ugyanezt  csinálja a  rövidebb ciklusokkal,
  295.       amelyek csak egyszer-kétszer hajtódnak végre.
  296.           A peephole-optimálást leegyszerûsítve így lehet  leírni:
  297.       amikor  a  compiler  egyszer már  elôállította  a  kódot egy
  298.       programrészlet  számára,  akkor  az  optimáló  még   egyszer
  299.       átvizsgálja a kész kódot, és eldönti, hogy nem lehet-e egyik
  300.       vagy  másik  részt leegyszerûsíteni.  Ha  egy több,  egymást
  301.       követô lépésbôl álló mintát megtalál egy táblázatban,  akkor
  302.       azokat   a  táblázatban   megadott  egyszerûbb   lépéssorral
  303.       helyettesíti.
  304.           Anders Hejlsberg, a Turbo Pascal compiler feltalálója és
  305.       írója   néhány  éve,   egy  CHIP-nek   adott  interjú   után
  306.       nyilatkozott programjának végsô finomításával  kapcsolatban:
  307.       nem ô maga gyomlálta ki a compiler utolsó hibáit, hanem az a
  308.       sok programozó, akik a Turbo Pascallal dolgoztak -- ez hívta
  309.       fel a figyelmét arra, hogy az ördög a részletekben lakozik.
  310.           Mivel a Pascal+ még egészen új a piacon, a CHIP kíváncsi
  311.       volt  arra,  hogy   vajon  nem  maradt-e   benne  valamilyen
  312.       programozási hiba. E keresés erôsen hasonlított a jól ismert
  313.       ""tû  a  szénakazalban"  esetre.  Hiszen  kitûnô programozók
  314.       adták bele  legjobb tudásukat  ebbe a  compilerbe, amely meg
  315.       akarja elôzni a Turbo Pascalt.
  316.           Teljesen különbözô felhasználási területekrôl  származó,
  317.       további   programokat   fordítottunk   le   a   Stony  Brook
  318.       Pascal+-szal, és lefuttattuk  azokat. Itt is  a részletekben
  319.       lakozott az ördög: a Pascal+ CHIP-tesztverziójában találtunk
  320.       néhány hibát. E hibákat az itt kinyomtatott  tesztprogrammal
  321.       fedeztük fel. A hibákat jeleztük az amerikai Stony Brook cég
  322.       szoftverfejlesztôinek.
  323.           Elôször néhány szó a  tesztprogramról: a Turbo Pascal  a
  324.       Write() eljárásban  lehetôvé teszi  a paraméterek  formázott
  325.       kiírását. Ennek  során az  érintett adatok  balra és  jobbra
  326.       zárva is megjeleníthetôk. A @KWriteln ('hallo': - 20)@N utasítás
  327.       azt jelenti, hogy a @K'hallo'@N karakterláncnak bal oldalon kell
  328.       megjelennie egy 20 karakter hosszú mezôben. Ez nem  probléma
  329.       a Turbo Pascal számára. A Pascal+ viszont rosszul értelmezte
  330.       az  utasításban lévô  mínuszjelet, és  65535-20, azaz  65515
  331.       üres  sort  írt  le,  mielôtt  végül  megjelent  a   @K'hallo'@N
  332.       karakterlánc.
  333.           A  második  hiba   a  FSPLIT  eljárásban   rejtôzött.  A
  334.       futásidejû könyvtár  e rutinja  szétbont egy  karakterláncot
  335.       file-névre  és  file-névkiterjesztésre.  Amíg  a  FSPLIT-nek
  336.       megadott  karakterlánc  szintaxisa megfelelô  volt,  addig a
  337.       Pascal+-nak  nem  volt  problémája.  Azonban szintaktikailag
  338.       hibás  karakterláncot  vagy  a  karakterláncon  belül   üres
  339.       sztringet nem tudott  feldolgozni a Pascal+-compiler  FSPLIT
  340.       eljárása. Ahelyett, hogy közölte volna a hibát, vagy megállt
  341.       volna, a program grafikus karaktereket írt a képernyôre.
  342.           A harmadik szépséghiba a VAL eljárásban rejtôzött, amely
  343.       tudvalevôleg egy numerikus karakterláncot értékké alakít át.
  344.       Nincs jelentôsége annak, hogy a karakterlánc egész (integer)
  345.       vagy tört (real) számot képvisel. A VAL csak akkor mûködött,
  346.       ha  az  átadott  argumentum  korrekt  volt.  A  Pascal+-szal
  347.       ellentétben hibás argumentum esetén a Turbo Pascal jelezte a
  348.       nem odavaló  karakter helyét  a karakterláncban.  A képernyô
  349.       kinyomtatott  képe mutatja,  hogy a  Pascal+ mit  kezdett  a
  350.       hibás számsorral.
  351.           A  negyedik   hiba  az   úgynevezett  hibakezelôben,   a
  352.       futásidejû  könyvtár  egyik eljárásában  bukkant  elô, amely
  353.       akkor  kerül meghívásra,  ha a  felhasználói program  futása
  354.       alatt  hiba  keletkezik. Ilyenkor  a  Pascal+ korrekt  módon
  355.       megszakította a programot, de  nem adta meg pontosan  a hiba
  356.       sorszámát és a hiba címét.
  357.           Mint    a    faxmásolat   mutatja,    a    Stony   Brook
  358.       szoftvercsoportja 24  órán belül  kiküszöbölte a  CHIP által
  359.       felfedezett összes hibát.  A Pascal+ forgalmazója,  a svájci
  360.       A+L AG biztosított minket továbbá arról, hogy legkésôbb  egy
  361.       hónapon belül ki lesznek gyomlálva a CHIP által felfedezett,
  362.       hálózati üzemelés során jelentkezô problémák. Még a  Windows
  363.       3.1  verziójának  tesztprogramjaival  sem  találtunk további
  364.       hibákat a compilerben.
  365.           Egyetlen  sort sem  kell megváltoztatni  a Turbo  Pascal
  366.       programok forrásszövegében --  reklámozza a Stony  Brook cég
  367.       hirdetési  kampányában. Ez  addig igaz,  amíg nem  dolgozunk
  368.       overlay-kkel.  Az  overlay-k  használata  olyan programozási
  369.       módszer, amelynek során különbözô programrészek foglalják el
  370.       ugyanazt a memóriaterületet. Az ""átfedô" programrészek gépi
  371.       kódja  mindaddig  a  merevlemezen  marad,  amíg  nem   kerül
  372.       felhasználásra. Mihelyt  egy adott  programszakaszra szükség
  373.       van, betöltôdik a helyére.
  374.           A   Stony   Brook   nem   vette   át   a   Turbo  Pascal
  375.       overlay-technikáit,   mivel  azok   túl  sok   korlátozással
  376.       terhelik    meg    az    egyre    inkább    divatba     jövô
  377.       Windows-programokat.  A  Turbo Pascal  által  az overlay-zés
  378.       során használt memóriakiosztási  technikák sem tetszettek  a
  379.       Pascal+  fejlesztôinek.  Ezért  az  overlay-knél   tudatosan
  380.       mondtak le a Turbo Pascallal való kompatibilitásról.
  381.           A  Stony  Brook  azért  sem  vette  át  a  Borlandtól az
  382.       overlay-technikát,  mert  a  Turbo  Pascalban  az  overlay-k
  383.       felosztása  a unitoknak  felel meg.  Emiatt különösen  akkor
  384.       vész kárba sok idô  a betöltéssel és kimentéssel,  amikor az
  385.       egyik overlay hívja a másikat.
  386.           A  Pascal+-ban  az  overlay-k  különálló   eljárásokból,
  387.       unitokból  vagy   a  kettô   kombinációjából  állhatnak.   A
  388.       programozó továbbá hozzárendelhet egy meghatározott eljárást
  389.       vagy  unitot   egy  overlay-hez,   ezenkívül  pedig   minden
  390.       overlay-hez  meghatározott  memóriaterületet.  Ha  tehát két
  391.       különbözô  overlay-bôl  származó,  két  eljárás  kölcsönösen
  392.       meghívja  egymást,  akkor mindkét  eljárás  egyidejûleg bent
  393.       lehet (többnyire bent  is van) a  memóriában. A program  így
  394.       sokkal gyorsabban fut.
  395.           Tehát azoknak a  programozóknak, akik a  forrásszövegben
  396.       lévô  Turbo  Pascal   stílusú  overlay-ket  a   Pascal+-szal
  397.       szeretnék  lefordítani,  kisebb  változtatásokat  kell saját
  398.       kezûleg  elvégezniük.  A  Pascal+  egyik  kézikönyvében  tíz
  399.       odalon  keresztül  pontosan  le  vannak  írva  az  overlay-k
  400.       részletei és programozási módozataik:
  401.           @KAREA
  402.           @KOverlay Prog1;
  403.           @KOverlay Prog2;
  404.           @K..............
  405.           @KOverlay Progn;@N
  406.           Az  AREA parancs  annak a  memóriaterületnek a  kezdetét
  407.       definiálja,  amely  késôbb  magában  foglalja  a  mindenkori
  408.       overlay  kódját.  Az AREA-t  követô  összes overlay-utasítás
  409.       használhatja   ezt   az   összefüggô   memóriaterületet.  Az
  410.       overlay-khez hozzárendelt terület automatikusan akkora lesz,
  411.       hogy  több overlay  együttesen is  beleférjen, ha  az  egyik
  412.       overlay egy másikat hív meg.
  413.           Akinek a Turbo Pascal mellé még szüksége van egy rendes,
  414.       szimbolikus hibakeresôre, annak külön kell megvennie a Turbo
  415.       Debuggert.  A  Pascal+   csomag  már  eleve   tartalmazza  a
  416.       szimbolikus   SBDEBUG   hibakeresôt,   amely   nem   annyira
  417.       terjedelmes  és  részletes   mint  a  Borland   terméke.  Az
  418.       elôállított  gépi  kód  kinyomtatott  listáit  a  mindenkori
  419.       debuggerrel készítettük el.
  420.           A Borland és a Stony Brook termékei közötti  különbségek
  421.       világosan felismerhetôk.  A Turbo  Debuggerhez hasonlóan  az
  422.       SBDEBUG  is  interaktívan  használható,  és  kijelzi  mind a
  423.       Pascal forráskódot, mind pedig az elkészített gépi kódot.
  424.  
  425.  
  426.       @VBeépített szimbolikus debugger@N
  427.  
  428.           A  Stony  Brook  terméke  ezenfelül  elôállít  egy olyan
  429.       debug-információt, amely  kompatibilis a  Microsoft Codeview
  430.       debuggerével. Az SBDEBUG-ot  így olyan programokon  is lehet
  431.       használni,  amelyeket  C  compilerrel,  a  Microsoft Fortran
  432.       compilerével vagy a Stony Brook saját Modula-2  compilerével
  433.       fordítottak  le.  Eltekintve  néhány  korlátozástól  a Turbo
  434.       Debuggerhez képest, a Pascal+ debugerrel is meglehetôsen jól
  435.       lehet dolgozni.
  436.           Már csak az a kérdés marad, hogy a Pascal+  egyenrangú-e
  437.       a jól bevált Turbo Pascal 6.0-val vagy esetleg jobb annál? A
  438.       rugalmas,  grafikus  kezelési  felülettel  rendelkezô,   két
  439.       Pascal    compilert    teljesen    eltérô     célfeladatokra
  440.       fejlesztették ki. A Turbo Pascal hatszor-tízszer  gyorsabban
  441.       fordítja  le  a  forrásprogramokat  mint  a  Pascal+.  Ezzel
  442.       szemben a Pascal+ maximálisan optimált kódot készít, amely a
  443.       szokásos   Pascal   programok   esetén   körülbelül  30%-kal
  444.       tömörebb, és kétszer gyorsabb.
  445.           Ha  a Pascal+  túl akarja  szárnyalni a  Turbo  Pascalt,
  446.       akkor még három fontos  változtatás szükséges: elôször is  a
  447.       compilerbe  be  kell  építeni  egy  olyan  opciót,  amellyel
  448.       egyszerû,  optimálás  nélküli  kód  fordítása  kérhetô.   Ez
  449.       növelné  a  fordítás  sebességét.  Csak  a  program végleges
  450.       változatánál lenne érdemes teljes optimálást kérni. (A Stony
  451.       Brook  cég  a  Modula-2  compilerébe  már  beépített   ilyen
  452.       lehetôséget.)
  453.           Másrészt  a  Pascal+-nak a  Turbo  Pascallal ellentétben
  454.       sajnos  nincs  helyzetfigyelô   súgója  (help).  A   Pascal+
  455.       kézikönyvei  nélkülözhetetlenek  --  a  Turbo  Pascalnál   a
  456.       felhasználó szinte mindent, amit a kézikönyvek tartalmaznak,
  457.       elôhívhat  az [F1]  vagy a  [Ctrl F1]  gombokkal. Aki  jóval
  458.       ezren  felüli  változót,  konstanst  és  eljárást   szeretne
  459.       beépíteni a  programjába, az  aligha él  meg egy  olyan súgó
  460.       nélkül mint a Turbo Pascalé.
  461.           Harmadsorban a Pascal+  kézikönyveit kizárólag az  olyan
  462.       professzionális programozók számára írták, akik járatosak az
  463.       összes   szokásos  magasszintû   programozási  nyelvben.   A
  464.       Pascalban  kezdôk   aligha  fognak   kiigazodni  ezekben   a
  465.       kézikönyvekben.
  466.           Mivel a Pascal+ a kiváló kódgenerátora miatt igen lassan
  467.       fordít,  a  profik  továbbra  is  a  Turbo  Pascalt   fogják
  468.       használni a programfejlesztésben.  A Pascal+ viszont  kiváló
  469.       ""utánégetô"  a Turbo  számára, mivel  a belôtt  programokat
  470.       sokkal  gyorsabbá  és  tömörebbé  fordíthatjuk  le  vele.  A
  471.       Pascal+ fejlesztôi rendszer  1000 márkába kerül  a grencheni
  472.       (Svájc) A+L AG-nél.
  473.           Mindent  összevéve  éppen ideje  volt  már, hogy  piacra
  474.       kerüljön a professzionális fejlesztôk által várva-várt Stony
  475.       Brook  compiler,  és kapható  legyen  a futásidejû  könyvtár
  476.       forráskódja.
  477.  
  478.       @KLoys Nachtmann@N
  479.  
  480.  
  481.       (* Stony Brook Pascal+ tesztprogram *)
  482.       (* Loys Nachtmann, Ulrich Kern *)
  483.  
  484.       uses dos;
  485.  
  486.       const
  487.         GoodString = 'c:\util\sbpascal\sbe.exe';
  488.         BadString  = 'c:\util\sbpascal\';
  489.         BadReal    = '1.2.3456 ';
  490.         BadInteger = '123ABC   ';
  491.  
  492.       var
  493.         d: dirstr;      (* path     *)
  494.         n: namestr;     (* file name*)
  495.         e: extstr;      (* extension*)
  496.  
  497.         r: real;    (* real number *)
  498.         i: integer;     (* integer number *)
  499.         ErrorPos: integer;
  500.  
  501.         ErrExitSave: POINTER;
  502.         ErrN, ErrM: WORD;
  503.  
  504.  
  505.       (*$F+*)
  506.         PROCEDURE Hibakezeles;
  507.         BEGIN
  508.           ExitProc:=ErrExitSave;
  509.           writeln('Hiba: ',ExitCode, ' / Cim: ',LongInt(ErrorAddr));
  510.         END;
  511.  
  512.  
  513.         begin
  514.  
  515.           (************************************************************)
  516.           writeln('Az [Enter] lenyomása után kis türelmet kérek');
  517.           readln;
  518.  
  519.           (* a balra zárt kiírás ellenôrzése *)
  520.  
  521.           writeln('hallo':-20);
  522.           writeln('hallo');
  523.           writeln;
  524.           writeln;
  525.  
  526.           (************************************************************)
  527.           (* az FSPLIT eljárás tesztelése *)
  528.  
  529.           writeln(GoodString,d,n,e);
  530.           writeln(d);
  531.           writeln(n);
  532.           writeln(e);
  533.           writeln;
  534.  
  535.           writeln(BadString);
  536.           fsplit(BadString,d,n,e);
  537.           writeln(d);
  538.           writeln(n);
  539.           writeln(e); writeln;
  540.  
  541.           (************************************************************)
  542.           (* a VAL eljárás tesztelése *)
  543.  
  544.           val(BadReal,r,ErrorPos);
  545.           writeln(Badreal, '   real=',r,'    ErrorPos=',ErrorPos);
  546.  
  547.           val(BadInteger,i,ErrorPos);
  548.           writeln(BadInteger,'   integer',i,'      ErrorPos=',ErrorPos);
  549.  
  550.           (************************************************************)
  551.           (* a hibakezelés tesztelése, például osztás nullával *)
  552.  
  553.           ErrExitSave:=ExitProc;
  554.           ExitProc:=@@Hibakezeles;
  555.           writeln;writeln;
  556.           write('Kérem adjon be két számot (például 2 0 [Enter]): ');
  557.           readln(ErrN,ErrM);
  558.           ErrM := ErrN DIV ErrM;
  559.           writeln(ErrM);
  560.       end.
  561.  
  562.           @VEz   a   tesztprogram   felszínre   hozta   a    Pascal+
  563.       @Vfogyatékosságait@N
  564.       ----------
  565.  
  566.       hallo
  567.       hallo
  568.  
  569.       c:\util\sbpascal\sbe.exe
  570.       c:\util\sbpascal\
  571.       sbe
  572.       .exe
  573.  
  574.       c:\util\sbpascal\
  575.       c:\util\sbpascal\
  576.  
  577.       1.2.3456    real= 0.0000000000E+00   ErrorPos=4
  578.       123ABC      integer=0   ErrorPos=4
  579.  
  580.  
  581.       Kérem adjon be két számot (például 2 0 [Enter]): 2 0
  582.       Hiba: 200 / Cim: 1152
  583.       Runtime error 200 at 0000:0480.
  584.  
  585.       D:\SBTEST\SOURCE>
  586.  
  587.           @VA   Turbo   Pascal   kifogástalanul   dolgozta   fel   a
  588.       @Vtesztprogramot, és a futás során felismerte az összes hibát@N
  589.  
  590.  
  591.       @KNéhány kérdés a Stony Brook céghez@N
  592.  
  593.       @VMiért kell még egy Pascal-compiler?@N
  594.  
  595.           @VCHIP:@N Miért készítették el a Pascal+-t?
  596.           @VStony Brook:@N Alaposan elemeztük a compilerek piacát,  és
  597.       megállapítottuk,    hogy    különösen    a   professzionális
  598.       Pascal-programozóknak  van   nagy  szükségük   egy  optimáló
  599.       compilerre.  Továbbá  a  Turbo Pascal  nem  elég  rugalmas e
  600.       felhasználói csoport számára, mivel a Turbo  objectformátuma
  601.       nem kompatibilis más magas szintû nyelvekkel.
  602.           @VCHIP:@N Miért írták a Pascal+-t Modula-2-ben?
  603.           @VStony    Brook:@N    Amikor    belekezdtünk    a   Pascal+
  604.       fejlesztésébe, volt  egy kiváló  Modula-2 compilerünk,  amit
  605.       szintén a mi fejlesztôi  csoportunk írt. Ez a  jó fejlesztôi
  606.       eszköz egészséges kiindulópontot  adott az optimáló  Pascal+
  607.       compiler elkészítéséhez.
  608.           @VCHIP:@N Mit gondolnak Önök a Pascalról és a Modula-2-rôl?
  609.           @VStony Brook:@N  Közismert, hogy  e két  programozási nyelv
  610.       Amerikában alárendelt szerepet játszik a C-hez képest. Ezzel
  611.       szemben a Pascal és a Modula-2 is nagy népszerûségnek örvend
  612.       Európában.  A Turbo  Pascal nyelvjárás  és a  Modula-2  két,
  613.       közel   egyenértékû,   magas   szintû   nyelv.  Mindkettônek
  614.       megvannak a maga elônyei és hibái. De véleményünk szerint  a
  615.       Turbo Pascal és a Pascal+ messze felülmúlja az összes többi,
  616.       piacon kapható magasszintû nyelvet.
  617.           @VCHIP:@N Amerikában a C uralkodik. Miért nem írtak optimáló
  618.       C- vagy akár C++-compilert?
  619.           @VStony Brook:@N Szerintünk  a C és  a Pascal úgy  viszonyul
  620.       egymáshoz,  mint  egy  dióhéj és  egy  kényelmes  csónak: az
  621.       elôbbi sokkal  könnyebben felborul  és elsüllyed.  Ezért a C
  622.       nyelvet  sem  nagyon kedveljük.  Mégegyszer:  úgy gondoljuk,
  623.       hogy  a Modula-2  és a  Pascal minden  tekintetben  magasabb
  624.       szinten álló nyelvek.  Ez vonatkozik a  napi programozásbeli
  625.       hatékonyságra,  a   meglévô  programok   karbantartására  és
  626.       olvashatóságára. Az  újonnan belépô  szoftverfejlesztôk igen
  627.       gyorsan   bedolgozhatják    magukat   a    bonyolult,   nagy
  628.       programokba.
  629.